home *** CD-ROM | disk | FTP | other *** search
- /* CVT.c- Quick hex-decimal-octal conversion program
- * call with online argument, displays equivalents (including ASCII)
- * call alone for muliple query
- * c.1986 w.borys
- */
- #include "std.h"
- COUNT base;
- main(ac,av)
- COUNT ac;
- TEXT *av[];
- {
- TEXT *p,inp[25];
- ULONG ul, val;
- COUNT single,i;
- TEXT *cptr;
- static TEXT *hlp[] =
- {"\n\nCVT program: quick hex-octal-decimal conversion\n",
- " Input number in any format: \n",
- " 0nnn or Onnn: octal input format\n",
- " 0xnnn or Hnnn: hex input format\n",
- " nnn or Dnnn: decimal input format\n",
- "Call with parameter for single shot mode\n",
- " or without parameter for query mode. c1986 borysoft\n\n"};
- static char *ct[]={
- "nul","soh","stx","etx","eot","enq","ack","bel",
- "bs","ht","lf","vt","ff","cr","so","si","dle",
- "dc1","dc2","dc3","dc4","nak","syn","etb","can",
- "em","sub","esc","fs","gs","rs","us"," "};
-
- single = 0;
- if (ac == 1)
- {
- for (i=0;i<7;i++)
- printf(hlp[i]);
- }
- FOREVER
- {
- if (ac == 2)
- {
- single=1;
- strcpy(inp,av[1]);
- }
- else
- {
- printf("Number to convert (Q=quit):");putchar(-1);
- scanf("%s",inp);
- if ((*inp | 040) == 'q')
- exit(0);
- }
- ac = 0;
- for (p=inp; *p != EOS; p++)
- *p = toupper(*p);
- p = inp;
- while (*p == ' ')
- p++;
- base =10;
- if (*p == '0')
- base = 8, p++;
- if (base == 8 && *p == 'X')
- base = 16, p++;
- if (*p == 'D')
- base = 10, p++;
- if (*p == 'O')
- base = 8, p++;
- if (*p == 'H')
- base = 16, p++;
-
- val = 0;
- for (;*p != EOS;p++)
- {
- if ((ul = valdig(*p)) == 99)
- break;
- else
- val = (LONG) base * val + ul;
- }
-
- if (ul==99)
- printf("\07 BAD CONVERSION\n");
-
- if (val < 32)
- cptr = ct[val];
-
- printf(" CVT(%s) Decimal: %U Octal: %O Hex: %X",
- inp,val,val,val);
- if (val < 255)
- printf(" Char: `%c'",val);
- if (val < 32)
- printf(" (%s)",cptr);
- printf("\n");
-
- if (single)
- exit(0);
- }
- }
- COUNT valdig(dig)
- TEXT dig;
- {
- COUNT n;
-
- n = 99;
- if (base==10)
- if (dig >= '0' && dig <= '9')
- n = dig - '0';
-
- if (base==8)
- if (dig >= '0' && dig <= '7')
- n = dig - '0';
-
- if (base==16)
- {
- if (dig >= '0' && dig <= '9')
- n = dig - '0';
- if (dig >= 'A' && dig <= 'F')
- n = dig - 55;
- }
- return(n);
- }